/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controle;

import Entidades.No;
import Entidades.LocalizadoraDeNos;
import java.util.ArrayList;

/**
 *
 * @author Adriano
 */
public class ControleNos {



    public static int cadastraNo(int x,int y){
        No no = new No(x, y);
        return LocalizadoraDeNos.insere(no);
    }

    
    
    public static void calculaEuristicas(No destino){
        No no=null;
        double distancia;
        for(int i=0;i<LocalizadoraDeNos.getLista().size();i++){
            no=(No)LocalizadoraDeNos.getLista().get(i);
            distancia=calculaDistancia(no,destino);
            no.setDistanciaEuristica(distancia);
        }
    }

    public static double calculaDistancia(No no1,No no2){
        int x1=no1.getCoordenadaX();
        int y1=no1.getCoordenadaY();
        int x2=no2.getCoordenadaX();
        int y2=no2.getCoordenadaY();
        double distancia=Math.sqrt(Math.pow(x1-x2,2) + Math.pow(y1-y2,2));
        return distancia;
    }


    public static void calculaDistanciaAcumulada(No sucessor,No noAtual){
            No no=sucessor;
            double distanciaPredessesor= ControleLinks.getDistanciaReal(no, noAtual);
            no.setDistanciaAcumulada(distanciaPredessesor + noAtual.getDistanciaAcumulada());
        
    }

    public static No selecionaMenorEstimado(ArrayList<No> sucessores){
        if(sucessores.size()==0){
            return null;
        }
        No menorDistancia=(No)sucessores.get(0);
        for(int i=1;i<sucessores.size();i++){
            No no=(No)sucessores.get(i);
            if(no.getDistanciaEstimada()< menorDistancia.getDistanciaEstimada()){
                menorDistancia=no;
            }
        }
        return menorDistancia;
    }


    public static double distancia(ArrayList<No> rota){
        double distancia=0;
        for(int i=0;i<rota.size()-1;i++){
            distancia=distancia+calculaDistancia((No)rota.get(i),(No)rota.get(i+1));
        }
        return distancia;
    }

     public static void mostraNos(){
        No no=null;
        double distancia;
        for(int i=0;i<LocalizadoraDeNos.getLista().size();i++){
            no=(No)LocalizadoraDeNos.getLista().get(i);
            System.out.println(no.getIdentificador());
        }
    }
     
     public static No getNo(int id){
         No no = null;
         no = LocalizadoraDeNos.busca(id);
         return no;
     }
}
